package com.qiusuo0226.core.util;

import com.alibaba.fastjson2.JSONObject;
import com.qiusuo0226.common.util.BeanContext;
import com.qiusuo0226.mvc.util.JsonResultModel;
import com.qiusuo0226.platform.property.ServerProperty;
import com.qiusuo0226.redis.util.RedisTool;
import com.qiusuo0226.security.config.SecurityProperty;
import com.qiusuo0226.security.util.JWTTool;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * 用户信息模块对应工具类
 * @author qiusuo
 * @date 2023/6/25 13:55
 */
@Slf4j
public class UserInfoUtil {

    private static RedisTool redisTool = BeanContext.getBean(RedisTool.class);

    private static ServerProperty serverProperty = BeanContext.getBean(ServerProperty.class);
    private static SecurityProperty securityProperty = BeanContext.getBean(SecurityProperty.class);

    /**
     * TODO 设置用户缓存信息
     * @param iid 用户的唯一标识
     * @param data 缓存数据
     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
     * @return
     */
    public static boolean setCache(String iid, JSONObject data, long time) {
        return redisTool.set(serverProperty.getApplicationName() + ":UserInfo:" + iid, data, time);
    }

    /**
     * TODO 获取用户缓存信息
     * @param iid 用户唯一标识
     * @return
     */
    public static JSONObject getCache(String iid) {
        return (JSONObject)redisTool.get(serverProperty.getApplicationName() + ":UserInfo:" + iid);
    }

    /**
     * TODO 移除用户缓存信息
     * @param iid 用户唯一标识
     * @return
     */
    public static void removeCache(String iid) {
        redisTool.del(serverProperty.getApplicationName() + ":UserInfo:" + iid);
    }


    /**
     * 校验创建者和token中的用户是否一致
     * @param token 个人登录token
     * @param creater 用户唯一标识
     * @return 返回结果模型success属性为true才代表验证通过
     */
    public static JsonResultModel checkCreater(String token, String creater) {
        Long tokenId = null;
        try {
            cn.hutool.json.JSONObject  verify = JWTTool.verify(token, securityProperty.getJwtKey());
            tokenId = verify.getLong("iid");
        } catch (Exception e) {
            // 验签失效
            return JsonResultModel.tokenError();
        }

        if (!StringUtils.equals(creater, String.valueOf(tokenId))) {
            // token越权
            return  JsonResultModel.tokenCrossPowerError();
        }

        return JsonResultModel.success();
    }
}
